Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


Input.h 2947df3349dd3d5e38bfa5124c80fd02ac443bab (2947df33) Text, 2.84 KB

T8b949e// Copyright (C) 2024, Mark Qvist

T8b949e// This program is free software: you can redistribute it and/or modify
T8b949e// it under the terms of the GNU General Public License as published by
T8b949e// the Free Software Foundation, either version 3 of the License, or
T8b949e// (at your option) any later version.

T8b949e// This program is distributed in the hope that it will be useful,
T8b949e// but WITHOUT ANY WARRANTY; without even the implied warranty of
T8b949e// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
T8b949e// GNU General Public License for more details.

T8b949e// You should have received a copy of the GNU General Public License
T8b949e// along with this program. If not, see <https://www.gnu.org/licenses/>.

Tff7b72#Tff7b72ifndef INPUT_H
Tff7b72#Tff7b72define INPUT_H
Tff7b72#Tff7b72define PIN_BUTTON pin_btn_usr1

Tff7b72#Tff7b72define PRESSED LOW
Tff7b72#Tff7b72define RELEASED HIGH

Tff7b72#Tff7b72define EVENT_ALL 0x00
Tff7b72#Tff7b72define EVENT_CLICKS 0x01
Tff7b72#Tff7b72define EVENT_BUTTON_DOWN 0x11
Tff7b72#Tff7b72define EVENT_BUTTON_UP 0x12
Tff7b72#Tff7b72define EVENT_BUTTON_CLICK 0x13
Tff7b72#Tff7b72define EVENT_BUTTON_DOUBLE_CLICK 0x14
Tff7b72#Tff7b72define EVENT_BUTTON_TRIPLE_CLICK 0x15
Tffa657int Te6edf3button_events Tff7b72= Te6edf3EVENT_CLICKSTb4b4b4;
Tffa657int Te6edf3button_state Tff7b72= Te6edf3RELEASEDTb4b4b4;
Tffa657int Te6edf3debounce_state Tff7b72= Te6edf3button_stateTb4b4b4;
Tffa657unsigned Tffa657long Te6edf3button_debounce_last Tff7b72= T79c0ff0Tb4b4b4;
Tffa657unsigned Tffa657long Te6edf3button_debounce_delay Tff7b72= T79c0ff25Tb4b4b4;
Tffa657unsigned Tffa657long Te6edf3button_down_last Tff7b72= T79c0ff0Tb4b4b4;
Tffa657unsigned Tffa657long Te6edf3button_up_last Tff7b72= T79c0ff0Tb4b4b4;

T8b949e// Forward declaration
Tffa657void Td2a8ffbutton_eventTb4b4b4(Tffa657uint8_t Te6edf3eventTb4b4b4, Tffa657unsigned Tffa657long Te6edf3durationTb4b4b4)Tb4b4b4;

Tffa657void Td2a8ffinput_initTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3pinModeTb4b4b4(Te6edf3PIN_BUTTONTb4b4b4, Te6edf3INPUT_PULLUPTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffinput_get_all_eventsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3button_events Tff7b72= Te6edf3EVENT_ALLTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffinput_get_click_eventsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3button_events Tff7b72= Te6edf3EVENT_CLICKSTb4b4b4;
Tb4b4b4}

Tffa657void Td2a8ffinput_readTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3button_reading Tff7b72= Te6edf3digitalReadTb4b4b4(Te6edf3PIN_BUTTONTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3button_reading Tff7b72!Tff7b72= Te6edf3debounce_stateTb4b4b4) Tb4b4b4{
Te6edf3button_debounce_last Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3debounce_state Tff7b72= Te6edf3button_readingTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3millisTb4b4b4(Tb4b4b4) Tff7b72- Te6edf3button_debounce_lastTb4b4b4) Tff7b72> Te6edf3button_debounce_delayTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3button_reading Tff7b72!Tff7b72= Te6edf3button_stateTb4b4b4) Tb4b4b4{
T8b949e// State changed
Tffa657int Te6edf3previous_state Tff7b72= Te6edf3button_stateTb4b4b4;
Te6edf3button_state Tff7b72= Te6edf3button_readingTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3button_events Tff7b72=Tff7b72= Te6edf3EVENT_ALLTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3button_state Tff7b72=Tff7b72= Te6edf3PRESSEDTb4b4b4) Tb4b4b4{
Te6edf3button_eventTb4b4b4(Te6edf3EVENT_BUTTON_DOWNTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3button_state Tff7b72=Tff7b72= Te6edf3RELEASEDTb4b4b4) Tb4b4b4{
Te6edf3button_eventTb4b4b4(Te6edf3EVENT_BUTTON_UPTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3button_events Tff7b72=Tff7b72= Te6edf3EVENT_CLICKSTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3previous_state Tff7b72=Tff7b72= Te6edf3PRESSED Tff7b72&Tff7b72& Te6edf3button_state Tff7b72=Tff7b72= Te6edf3RELEASEDTb4b4b4) Tb4b4b4{
Te6edf3button_up_last Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3button_eventTb4b4b4(Te6edf3EVENT_BUTTON_CLICKTb4b4b4, Te6edf3button_up_lastTff7b72-Te6edf3button_down_lastTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3previous_state Tff7b72=Tff7b72= Te6edf3RELEASED Tff7b72&Tff7b72& Te6edf3button_state Tff7b72=Tff7b72= Te6edf3PRESSEDTb4b4b4) Tb4b4b4{
Te6edf3button_down_last Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tb4b4b4}

Tffa657bool Td2a8ffbutton_pressedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3button_state Tff7b72=Tff7b72= Te6edf3PRESSEDTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72#Tff7b72endif


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────